import Vue from 'vue';
import iView from 'iview';
import Util from '../libs/util';
import VueRouter from 'vue-router';
import Cookies from 'js-cookie';
import {routers, otherRouter, appRouter} from './router';
import api from '../api';
import store from '../store';

Vue.use(VueRouter);

// 路由配置
const RouterConfig = {
    // mode: 'history',
    routes: routers
};

export const router = new VueRouter(RouterConfig);

store.commit('refreshMenuList');

router.beforeEach((to, from, next) => {
    iView.LoadingBar.start();
    Util.title(to.meta.title);
    if (Cookies.get('token')) {
        if (to.name === 'login') {
            Util.title();
            next({
                name: 'home_index'
            });
        } else {
            const curRouterObj = Util.getRouterObjByName([otherRouter, ...store.state.app.menuList], to.name);
            if (curRouterObj && curRouterObj.access !== undefined) { // 需要判断权限的路由
                if (Util.showThisRoute(curRouterObj.access, parseInt(Cookies.get('access')))) {
                    Util.toDefaultPage([otherRouter, ...appRouter], to.name, router, next); // 如果在地址栏输入的是一级菜单则默认打开其第一个二级菜单的页面
                } else {
                    next({
                        replace: true,
                        name: 'error_403'
                    });
                }
            } else { // 没有配置权限的路由, 直接通过
                Util.toDefaultPage([...routers], to.name, router, next);
            }
        }
    } else {
        if (to.name === 'login') {
            next();
        } else {
            const token = sessionStorage.getItem('token');
            if (token) {
                api.loginByToken(token).then(data => {
                    if (data.code === 0) {
                        Cookies.set('userId', data.data.id, {expires: 1});
                        Cookies.set('user', data.data.username, {expires: 1});
                        Cookies.set('token', data.data.token, {expires: 1});
                        Cookies.set('access', data.data.roleId, {expires: 1});
                        sessionStorage.setItem('token', data.data.token);

                        next();
                    }
                }).then(() => {
                    store.commit('setMenuList');
                });
            } else {
                next({
                    name: 'login'
                });
            }
        }
    }

    // if (!Cookies.get('token') && to.name !== 'login') { // 判断是否已经登录且前往的页面不是登录页
    //     next({
    //         name: 'login'
    //     });
    // } else if (Cookies.get('token') && to.name === 'login') { // 判断是否已经登录且前往的是登录页
    //     Util.title();
    //     next({
    //         name: 'home_index'
    //     });
    // } else {
    //     const curRouterObj = Util.getRouterObjByName([otherRouter, ...appRouter], to.name);
    //     if (curRouterObj && curRouterObj.access !== undefined) { // 需要判断权限的路由
    //         if (Util.showThisRoute(curRouterObj.access, parseInt(Cookies.get('access')))) {
    //             Util.toDefaultPage([otherRouter, ...appRouter], to.name, router, next); // 如果在地址栏输入的是一级菜单则默认打开其第一个二级菜单的页面
    //         } else {
    //             next({
    //                 replace: true,
    //                 name: 'error-403'
    //             });
    //         }
    //     } else { // 没有配置权限的路由, 直接通过
    //         Util.toDefaultPage([...routers], to.name, router, next);
    //     }
    // }
});

router.afterEach((to) => {
    Util.openNewPage(router.app, to.name, to.params, to.query);
    iView.LoadingBar.finish();
    window.scrollTo(0, 0);
});
